const express = require('express')
const app = express()

// 解析token中间件
const expressJWT = require('express-jwt')
const { jwtSecretKey } = require('./config/index.js')

// cors跨域中间件
const cors = require('cors')
app.use(cors())

// 解析表单数据的中间件
app.use(express.urlencoded({ extended: false }))
app.use(express.json())

// 定义一个处理错误的中间件
app.use(function (req, res, next) {
    res.cc = function (err, status = 404) {
        res.send({
            // 状态
            status,
            message: err instanceof Error ? err.message : err,
        })
    }
    next()
})
//expressJWT他会将用户携带token解析为用户信息,并把它放到req.user上  
//unless指定不需要带token的接口
app.use(expressJWT({secret:jwtSecretKey}).unless({path:[/^\/api\//]}))

// 路由中间件要放到最后
const router = require('./router/user.js')
const userInfoRouter = require('./router/userinfo.js')

app.use('/api', router)// api + 路由中的url
app.use('/my', userInfoRouter)// api + 路由中的url


// 定义一个专门捕获joi错误的中间件  ？？？
app.use(function (err, req, res, next) {
    if (err.name === 'UnauthorizedError') return res.cc('身份认证失效')
    res.cc(err)
})

app.listen(2000, () => {
    console.log('http://127.0.0.1:2000 启动了')
})